Red Hat System Administration II 8.2

Запуск базового контейнера

Задачи

После завершения этого раздела вы сможете установить утилиты управления контейнерами и запустить простой контейнер без прав root.

Установка утилит управления контейнерами

Чтобы начать запускать контейнеры в системе и управлять ими, необходимо установить соответствующие утилиты командной строки. Установите модуль container-tools с помощью команды yum.

[root@host ~]# yum module install container-tools

Модуль container-tools содержит программные пакеты, которые устанавливают несколько утилит. В этой главе используются следующие утилиты: podman и skopeo.

Примечание

По умолчанию система устанавливает утилиты быстрых потоков container-tools:rhel8, которые каждые три месяца обновляются с использованием последней стабильной версии контейнерных утилит.

Альтернативные стабильные потоки, которые используют только определенную версию утилит, не получают обновлений компонентов. Red Hat планирует один раз в год выпускать новые стабильные потоки, которые будут поддерживаться в течение двух лет.

Выбор образов и реестров контейнеров

Реестр контейнеров ― это репозиторий для хранения и извлечения образов контейнеров. Разработчик отправляет (push) образы контейнеров в реестр. Вы извлекаете (pull) эти образы контейнеров из реестра в локальную систему, чтобы использовать их для запуска контейнеров.

Вы можете использовать открытый реестр, содержащий сторонние образы, или закрытый реестр, контролируемый вашей организацией. Источник образов контейнеров имеет большое значение. Как и в случае с любым другим программным пакетом, необходимо знать, можно ли доверять коду в образе контейнера. В разных реестрах применяются разные политики, регулирующие предоставление, оценку и тестирование отправляемых в них образов контейнеров.

Red Hat распространяет сертифицированные образы контейнеров через два основных реестра контейнеров, доступ к которым возможен с помощью учетных данных Red Hat:

  • registry.redhat.io для контейнеров на основе официальных продуктов Red Hat;

  • registry.connect.redhat.com для контейнеров на основе продуктов сторонних поставщиков.

Red Hat постепенно выводит из эксплуатации старый реестр registry.access.redhat.com.

Red Hat Container Catalog (https://access.redhat.com/containers) предоставляет веб-интерфейс, который можно использовать для поиска сертифицированного контента в этих реестрах.

Примечание

В этой учебной аудитории для предоставления образов контейнеров используется закрытый реестр на основе Red Hat Quay. Дополнительные сведения об этом программном обеспечении см. на странице https://access.redhat.com/products/red-hat-quay.

Соглашения об именовании контейнеров

Образы контейнеров именуются на основе следующего синтаксиса полностью определенного имени образа:

registry_name/user_name/image_name:tag

  • registry_name ― это имя реестра, в котором хранится образ. Как правило, это полностью определенное доменное имя реестра.

  • user_name представляет пользователя или организацию, которым принадлежит образ.

  • image_name должно быть уникальным именем образа в пространстве имен пользователя.

  • tag указывает версию образа. Если в имени образа не указан тег образа, предполагается тег latest.

Запуск контейнеров

Чтобы запустить контейнер в локальной системе, сначала необходимо извлечь образ контейнера. Используйте утилиту Podman для извлечения образа из реестра. При извлечении образов всегда используйте полностью определенное имя образа. Команда podman pull извлекает указанный образ из реестра и сохраняет его локально.

[user@host ~]$ podman pull registry.access.redhat.com/ubi8/ubi:latest
Trying to pull registry.access.redhat.com/ubi8/ubi:latest...Getting image source signatures
Copying blob 77c58f19bd6e: 70.54 MiB / 70.54 MiB [=========================] 10s
Copying blob 47db82df7f3f: 1.68 KiB / 1.68 KiB [===========================] 10s
Copying config a1f8c9699786: 4.26 KiB / 4.26 KiB [==========================] 0s
Writing manifest to image destination
Storing signatures
a1f8c969978652a6d1b2dfb265ae0c6c346da69000160cd3ecd5f619e26fa9f3

Podman сохраняет извлеченные образы локально, и посмотреть их можно с помощью команды podman images.

[user@host ~]$ podman images
REPOSITORY                            TAG      IMAGE ID       CREATED      SIZE
registry.access.redhat.com/ubi8/ubi   latest   a1f8c9699786   5 weeks ago  211 MB

В предыдущем выводе показано, что тег образа — latest, а идентификатор образа ― a1f8c96699786.

Чтобы запустить контейнер из этого образа, используйте команду podman run. При выполнении команды podman run вы создаете и запускаете новый контейнер из образа контейнера. При необходимости используйте опции -it для взаимодействия с контейнером. Опции -it выделяют терминал для контейнера и позволяют отправлять в него команды нажатием клавиш.

[user@host ~]$ podman run -it registry.access.redhat.com/ubi8/ubi:latest
[root@8b032455db1a /]# 

Важно

Если вы запускаете контейнер, используя полностью определенное имя образа, но образ еще не сохранен локально, команда podman run сначала извлекает образ из реестра, а затем запускает его.

Примечание

Многие флаги Podman также имеют альтернативную длинную форму. Некоторые из них описаны ниже.

  • Флаг -t эквивалентен --tty. Он означает, что контейнеру выделяется pseudo-tty (псевдотерминал).

  • Флаг -i эквивалентен --interactive. При использовании этой опции контейнер принимает стандартный поток ввода.

  • Флаг -d (или его длинная форма --detach) означает, что контейнер работает в фоновом режиме (отсоединен). При использовании этой опции утилита Podman запускает контейнер в фоновом режиме и отображает сформированный идентификатор контейнера.

Полный список флагов см. на man-странице podman-run(1).

При указании контейнера утилита Podman распознает имя или сформированный идентификатор контейнера. При запуске контейнера с помощью Podman используйте опцию --name, чтобы задать имя контейнера. Имена контейнеров должны быть уникальными. Если в команде podman run не указано имя контейнера, утилита Podman формирует произвольное уникальное имя.

В следующем примере назначается имя контейнера, терминал Bash запускается непосредственно внутри контейнера, и на нем интерактивно выполняется команда.

Примечание

Обратите внимание, что в случае, если теги не указаны явным образом, предполагается тег latest.

Команда в следующем примере вводится в одной строке.

[user@host ~]$ podman run -it --name=rhel8 registry.access.redhat.com/ubi8/ubi /⁠bin/bash
[root@c20631116955 /]# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.2 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"
[root@c20631116955 /]# exit
exit
[user@host ~]$

Вы также можете выполнить быструю команду в контейнере, не взаимодействуя с ним, а после завершения команды удалить контейнер. Для этого используйте команду podman run --rm, указав после нее образ контейнера и соответствующую команду.

[user@host ~]$ podman run --rm registry.access.redhat.com/ubi8/ubi cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.2 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.2"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.2
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.2"
[user@host ~]$ 

Анализ изоляции контейнеров

Контейнеры обеспечивают изоляцию ресурсов во время выполнения. Контейнеры используют пространства имен Linux, чтобы предоставлять отдельные изолированные окружения для ресурсов, таких как процессы, сетевые подключения и тома. Процессы, работающие в контейнере, изолированы от всех остальных процессов на хост-машине.

Просмотрите процессы, запущенные внутри контейнера.

[user@host ~]$ podman run -it registry.access.redhat.com/ubi7/ubi /bin/bash
[root@ef2550ed815d /]# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  4.5  0.1  11840  2904 pts/0    Ss   22:10   0:00 /bin/bash
root          15  0.0  0.1  51768  3388 pts/0    R+   22:10   0:00 ps aux

Обратите внимание, что имя пользователя и идентификатор в контейнере отличаются от имени пользователя и идентификатора на хост-машине.

[root@ef2550ed815d /]# id
uid=0(root) gid=0(root) groups=0(root)
[root@ef2550ed815d /]# exit
exit
[user@host ~]$ id
uid=1000(user) gid=1000(user) groups=1000(user),10(wheel)

Ссылки

Man-страницы podman-pull(1), podman-images(1) и podman-run(1)

Дополнительные сведения см. в главе Starting with containers руководства Red Hat Enterprise Linux 8 Building, Running, and Managing Containers: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index#starting-with-containers_building-running-and-managing-containers